# 数组只能看作一个具有长度限制的列表. 从定义上来讲python中的列表 不等同于 数组 (平常在操作时 我们经常拿列表来模拟数组!!!)

# 因为数组是线性的 内存空间是连续的! 所以对数组的访问是十分高效的

# 数组的长度是固定的

# 大多数编程语言会将数组元素初始化为 0

#1. 数组（array）是一种线性数据结构，其将相同类型的元素存储在连续的内存空间中
a = ["a","b","c"] # 拿python中的列表模拟了一个字符串数组
b = [1,2,3] # 拿python中的列表模拟了一个整型数组

#2. 初始化数组 (简单的约束)
arr: list[int] = [0] * 5  # [ 0, 0, 0, 0, 0 ]
nums: list[int] = [1, 3, 2, 5, 4]
print(arr,nums)

#3. 随机访问数组中的任意一个元素
import random
def random_access(nums: list[int]) -> int:
    """随机访问元素"""
    # 在区间 [0, len(nums)-1] 中随机抽取一个数字 (索引,下标)
    random_index = random.randint(0, len(nums) - 1)
    # 获取并返回随机元素
    random_num = nums[random_index]
    return random_num
# print(random_access([1,2,3,4,5]))


#4. 插入元素
def insert(nums: list[str], num: str, index: int):
    """在数组的索引 index 处插入元素 num"""
    # 把索引 index 以及之后的所有元素向后移动一位
    for i in range(len(nums) - 1, index, -1):
        nums[i] = nums[i - 1]
    # 将 num 赋给 index 处的元素
    nums[index] = num

vowel = ['a', 'e', 'i', 'u']
insert(vowel,"o",3)
print(vowel)

# 看hello-算法

#  扩容数组
def extend(nums: list[int], enlarge: int) -> list[int]:
    """扩展数组长度"""
    # 初始化一个扩展长度后的数组
    res = [0] * (len(nums) + enlarge)
    # 将原数组中的所有元素复制到新数组
    for i in range(len(nums)):
        res[i] = nums[i]
    # 返回扩展后的新数组
    return res

a = [1]

b = extend(a,10)
print(a,b)